home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / PowerD / Pdmod / modules / arpa / nameser.m < prev    next >
Encoding:
Text File  |  2002-10-28  |  8.2 KB  |  217 lines

  1. #define PACKETSZ        512             /* maximum packet size */
  2. #define MAXDNAME        256             /* maximum domain name */
  3. #define MAXCDNAME       255             /* maximum compressed domain name */
  4. #define MAXLABEL        63              /* maximum length of domain label */
  5.         /* Number of bytes of fixed size data in query structure */
  6. #define QFIXEDSZ        4
  7.         /* number of bytes of fixed size data in resource record */
  8. #define RRFIXEDSZ       10
  9.  
  10. /*
  11.  * Internet nameserver port number
  12.  */
  13. #define NAMESERVER_PORT 53
  14.  
  15. /*
  16.  * Currently defined opcodes
  17.  */
  18. #define QUERY           $0             /* standard query */
  19. #define IQUERY          $1             /* inverse query */
  20. #define STATUS          $2             /* nameserver status query */
  21. /*#define xxx           $3     */      /* $3 reserved */
  22.         /* non standard */
  23. #define UPDATEA         $9             /* add resource record */
  24. #define UPDATED         $a             /* delete a specific resource record */
  25. #define UPDATEDA        $b             /* delete all nemed resource record */
  26. #define UPDATEM         $c             /* modify a specific resource record */
  27. #define UPDATEMA        $d             /* modify all named resource record */
  28.  
  29. #define ZONEINIT        $e             /* initial zone transfer */
  30. #define ZONEREF         $f             /* incremental zone referesh */
  31.  
  32. /*
  33.  * Currently defined response codes
  34.  */
  35. #define NOERROR         0               /* no error */
  36. #define FORMERR         1               /* format error */
  37. #define SERVFAIL        2               /* server failure */
  38. #define NXDOMAIN        3               /* non existent domain */
  39. #define NOTIMP          4               /* not implemented */
  40. #define REFUSED         5               /* query refused */
  41.         /* non standard */
  42. #define NOCHANGE        $f             /* update failed to change db */
  43.  
  44. /*
  45.  * Type values for resources and queries
  46.  */
  47. #define T_A             1               /* host address */
  48. #define T_NS            2               /* authoritative server */
  49. #define T_MD            3               /* mail destination */
  50. #define T_MF            4               /* mail forwarder */
  51. #define T_CNAME         5               /* canonical name */
  52. #define T_SOA           6               /* start of authority zone */
  53. #define T_MB            7               /* mailbox domain name */
  54. #define T_MG            8               /* mail group member */
  55. #define T_MR            9               /* mail rename name */
  56. #define T_NULL          10              /* null resource record */
  57. #define T_WKS           11              /* well known service */
  58. #define T_PTR           12              /* domain name pointer */
  59. #define T_HINFO         13              /* host information */
  60. #define T_MINFO         14              /* mailbox information */
  61. #define T_MX            15              /* mail routing information */
  62. #define T_TXT           16              /* text strings */
  63.         /* non standard */
  64. #define T_UINFO         100             /* user (finger) information */
  65. #define T_UID           101             /* user ID */
  66. #define T_GID           102             /* group ID */
  67. #define T_UNSPEC        103             /* Unspecified format (binary data) */
  68.         /* Query type values which do not appear in resource records */
  69. #define T_AXFR          252             /* transfer zone of authority */
  70. #define T_MAILB         253             /* transfer mailbox records */
  71. #define T_MAILA         254             /* transfer mail agent records */
  72. #define T_ANY           255             /* wildcard match */
  73.  
  74. /*
  75.  * Values for class field
  76.  */
  77.  
  78. #define C_IN            1               /* the arpa internet */
  79. #define C_CHAOS         3               /* for chaos net at MIT */
  80. #define C_HS            4               /* for Hesiod name server at MIT */
  81.         /* Query class values which do not appear in resource records */
  82. #define C_ANY           255             /* wildcard match */
  83.  
  84. /*
  85.  * Status return codes for T_UNSPEC conversion routines
  86.  */
  87. #define CONV_SUCCESS 0
  88. #define CONV_OVERFLOW -1
  89. #define CONV_BADFMT -2
  90. #define CONV_BADCKSUM -3
  91. #define CONV_BADBUFLEN -4
  92.  
  93. #ifndef BYTE_ORDER
  94. #define LITTLE_ENDIAN   1234    /* least-significant byte first (vax) */
  95. #define BIG_ENDIAN      4321    /* most-significant byte first (IBM, net) */
  96. #define PDP_ENDIAN      3412    /* LSB first in word, MSW first in long (pdp) */
  97.  
  98. /* --- OBSOLETE ---
  99. #if defined(vax) || defined(ns32000) || defined(sun386) || defined(MIPSEL) || \
  100.     defined(BIT_ZERO_ON_RIGHT)
  101. #define BYTE_ORDER      LITTLE_ENDIAN
  102.  
  103. #endif
  104. #if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
  105.     defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
  106.     defined(MIPSEB) || defined (BIT_ZERO_ON_LEFT)
  107. #define BYTE_ORDER      BIG_ENDIAN
  108. #endif
  109. #endif /* BYTE_ORDER */
  110.  
  111. #ifndef BYTE_ORDER
  112.         /* you must determine what the correct bit order is for your compiler */
  113.         UNDEFINED_BIT_ORDER;
  114. #endif
  115. */
  116. /*
  117.  * Structure for query header, the order of the fields is machine and
  118.  * compiler dependent, in our case, the bits within a byte are assignd 
  119.  * least significant first, while the order of transmition is most 
  120.  * significant first.  This requires a somewhat confusing rearrangement.
  121.  */
  122.  
  123. /* --- must do ---
  124. typedef struct {
  125.         u_short id;             /* query identification number */
  126. #if BYTE_ORDER == BIG_ENDIAN
  127.                         /* fields in third byte */
  128.         u_char  qr:1;           /* response flag */
  129.         u_char  opcode:4;       /* purpose of message */
  130.         u_char  aa:1;           /* authoritive answer */
  131.         u_char  tc:1;           /* truncated message */
  132.         u_char  rd:1;           /* recursion desired */
  133.                         /* fields in fourth byte */
  134.         u_char  ra:1;           /* recursion available */
  135.         u_char  pr:1;           /* primary server required (non standard) */
  136.         u_char  unused:2;       /* unused bits */
  137.         u_char  rcode:4;        /* response code */
  138. #endif
  139. #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
  140.                         /* fields in third byte */
  141.         u_char  rd:1;           /* recursion desired */
  142.         u_char  tc:1;           /* truncated message */
  143.         u_char  aa:1;           /* authoritive answer */
  144.         u_char  opcode:4;       /* purpose of message */
  145.         u_char  qr:1;           /* response flag */
  146.                         /* fields in fourth byte */
  147.         u_char  rcode:4;        /* response code */
  148.         u_char  unused:2;       /* unused bits */
  149.         u_char  pr:1;           /* primary server required (non standard) */
  150.         u_char  ra:1;           /* recursion available */
  151. #endif
  152.                         /* remaining bytes */
  153.         u_short qdcount;        /* number of question entries */
  154.         u_short ancount;        /* number of answer entries */
  155.         u_short nscount;        /* number of authority entries */
  156.         u_short arcount;        /* number of resource entries */
  157. } HEADER;
  158. */
  159. /*
  160.  * Defines for handling compressed domain names
  161.  */
  162. #define INDIR_MASK      $c0
  163.  
  164. /*
  165.  * Structure for passing resource records around.
  166.  */
  167. OBJECT rrec
  168.     r_zone:WORD,                 /* zone number */
  169.     r_class:WORD,                /* class number */
  170.     r_type:WORD,                 /* type number */
  171.     r_ttl:ULONG,                  /* time to live */
  172.     r_size:LONG,                 /* size of data area */
  173.     r_data:PTR TO UBYTE                /* pointer to data */
  174.  
  175. /* -- what's this? --
  176. extern  u_short _getshort();
  177. extern  u_long  _getlong();
  178. */
  179.  
  180. /*
  181.  * Inline versions of get/put short/long.
  182.  * Pointer is advanced; we assume that both arguments
  183.  * are lvalues and will already be in registers.
  184.  * cp MUST be u_char *.
  185.  */
  186. /*
  187. #define GETSHORT(s, cp) { \
  188.         (s) = *(cp)++ << 8; \
  189.         (s) |= *(cp)++; \
  190. }
  191.  
  192. #define GETLONG(l, cp) { \
  193.         (l) = *(cp)++ << 8; \
  194.         (l) |= *(cp)++; (l) <<= 8; \
  195.         (l) |= *(cp)++; (l) <<= 8; \
  196.         (l) |= *(cp)++; \
  197. }
  198.  
  199.  
  200. #define PUTSHORT(s, cp) { \
  201.         *(cp)++ = (s) >> 8; \
  202.         *(cp)++ = (s); \
  203. }
  204.  
  205. /*
  206.  * Warning: PUTLONG destroys its first argument.
  207.  */
  208. #define PUTLONG(l, cp) { \
  209.         (cp)[3] = l; \
  210.         (cp)[2] = (l >>= 8); \
  211.         (cp)[1] = (l >>= 8); \
  212.         (cp)[0] = l >> 8; \
  213.         (cp) += sizeof(u_long); \
  214. }
  215. */
  216. #endif /* !ARPA_NAMESER_H */
  217.